水平垂直居中
# 水平垂直居中
[TOC]
# 一、水平居中
# 1.1 内联元素
在爸爸身上写text-align:center
# 1.2 块级元素
margin-left: auto;margin-right: auto
- 为什么
margin:0 auto;
水平居中不了?
- 必备条件:块级+指定宽度
- 注意事项:inline-block无效。
# 二、垂直居中
# 2.1 父级height未死
.parent{padding: 10px 0}
# 2.2 父级height写死
# 2.3 文本
# 2.3.1 单行文本
line-hight
# 2.3.2 多行文本垂直居中
暂略
# 水平垂直居中
# 3.1基于绝对定位的解决方案
# 3.1.1calc()
body {
height: 100vh;
}
main {
position: absolute;
width: 18em;
height: 6em;
// 使用calc()动态运算时,要注意加减运算时,符号前后要加空格。
// 乘除运算则不需要
top: calc(50% - 3em); // 注意3em不要少了单位
left: calc(50% - 9em);
}
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
# 3.1.2 translate()
main {
position: absolute;
width: 18em;
height: 6em;
top: 50%;
left: 50%;
/* 注意这里启动了3D硬件加速哦 会增加耗电量的 */
transform: translate(-50%,-50%);
}
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
# 3.2 基于视口单位的解决方案
main {
width: 18em;
height: 2em;
margin-top: 50vh;
margin-left: 50vh;
transform: translateX(-50%);
transform: translateY(-50%);
}
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
# 3.3 基于Flexbox的解决方案(最佳解决方案)
# 3.3.1 margin
body {
display: flex;
min-height: 100vh;
}
main {
margin: auto;
}
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
# 3.3.2 匿名容器(即文本节点)
<main> 3 </main>
main {
display: flex;
justify-content: center;
align-items: center;
width: 18em;
height: 10em;
}
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8